package org.jeecg;

import org.springframework.boot.test.context.SpringBootTest;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class UDP_Server {
    public static void main(String[] args ) throws SocketException, UnknownHostException{
        //分别设置客户端和服务器的端口号
        int server_port = 146;
        int client_port = 146;
        long num=0;
        //创建服务器端数据报套接字，用于接收和发送数据包
        DatagramSocket server = new DatagramSocket(server_port);
        //设置数据报套接字超时，设置时间内没有收到数据包则超时，注意这个针对的是端口上接受的
        //所有数据包，如果有其它客户端传来的数据包，是不会超时的
        server.setSoTimeout(5000000);
        //设置数据包对象，用来对数据包进行写入和读取的操作，指定数据包大小
        DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
        //设置数据包发往的客户端地址，是InetAddress类型的地址
        //如果服务器这里只接受不发送，可以不用设置
        packet.setAddress(InetAddress.getByName("127.0.0.1"));
        //设置数据包发往的客户端端口号，如果服务器这里只接受不发送，可以不用设置
        //packet.setPort(client_port);
        try {
            //指定接受的文件名
            File file = new File("test.mp4");
            //创建输出到文件的输出流
            @SuppressWarnings("resource")
            OutputStream os = new FileOutputStream(file);
            //接受端口上的数据包，写入文件输出流
            while(true) {
                server.receive(packet);
                os.write(packet.getData());
                os.flush();
                num+=1;
            }
        } catch (IOException e) {
            server.close();
            System.out.println("收到"+num+"个数据包");
            System.out.println("未再接受到数据包，超时");
            e.printStackTrace();
        }
    }
}